package com.tedu.API.list;

import org.junit.Test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * Set集合Collection集合子接口
 * Set集合接口：无序，无下标，元素不可重复【唯一性】
 * Set集合方法与Collection集合方法【使用一致】
 * add()  remove() contains() size() clear()
 * 使用Iterator迭代器遍历
 * Set集合---接口--无法创建对象--实现类
 * HashSet:由哈希算法实现，不保证元素顺序，不允许元素重复，可以存null
 * LinkedHashSet:【方法与HashSet一致】，由哈希算法实现，保持元素的顺序
 * 不允许元素重复，可以存null
 * TreeSet【算法：红黑树】:速度低,不可以存null 按照元素的自然顺序或者比较器进行存储
 * 不允许元素重复
 */
public class SetAPI {
    @Test
    public void testSet() {
        Set<String> set = new HashSet<>();
        set.add("征鹿尾");
        set.add("蒸羊糕");
        set.add("烧花鸭");
        set.add("烧子鹅");
        set.add("烧子鹅");
        set.add(null);
        System.out.println("Set集合：" + set);
        boolean b = set.contains("烧花鸭");
        System.out.println("判断Set集合是否存在【烧花鸭】" + b);
        System.out.println("判断Set集合长度" + set.size());
        //Iterator遍历 set 集合元素
        //1.通过set引用调用 iterator()方法 获取迭代器的实例
        Iterator<String> it = set.iterator();
        //2.问取
        while (it.hasNext()) {
            String str = it.next();
            //null引用类型的默认值  不是字符串
            //判断明确的值  必须 ==
            //判断对象    使用 equals 实值
            //            obj.equals(add) 地址值
            if (null==str) {
                it.remove();
            }
        }
        System.out.println("删除后的集合" + set);
    }
}
